using UnityEngine;
using UI.BankingPanel.Data;

/// <summary>
/// Excel导出功能测试器
/// 用于测试和验证Excel导出功能
/// </summary>
public class ExcelExportTester : MonoBehaviour
{
    [Header("测试设置")]
    [SerializeField] private bool autoTestOnStart = false;
    [SerializeField] private string customFileName = "测试导出";
    
    void Start()
    {
        if (autoTestOnStart)
        {
            TestExportWithSampleData();
        }
    }
    
    /// <summary>
    /// 测试导出功能（使用示例数据）
    /// </summary>
    [ContextMenu("测试导出功能")]
    public void TestExportWithSampleData()
    {
        Debug.Log("[ExcelExportTester] 开始测试Excel导出功能...");
        
        // 创建测试数据
        var testData = CreateSampleBankingData();
        
        // 执行导出
        var result = ExcelExporter.ExportBankingDataToExcel(testData, customFileName);
        
        // 输出结果
        if (result.Success)
        {
            Debug.Log($"[ExcelExportTester] 导出成功！");
            Debug.Log($"文件路径: {result.FilePath}");
            Debug.Log($"消息: {result.Message}");
            
            // 显示导出目录
            Debug.Log($"导出目录: {ExcelExporter.GetExportDirectory()}");
        }
        else
        {
            Debug.LogError($"[ExcelExportTester] 导出失败: {result.Message}");
        }
    }
    
    /// <summary>
    /// 测试导出功能（使用当前系统数据）
    /// </summary>
    [ContextMenu("测试导出当前数据")]
    public void TestExportCurrentData()
    {
        Debug.Log("[ExcelExportTester] 开始测试导出当前系统数据...");
        
        // 查找BankingCtrl
        var bankingCtrl = FindObjectOfType<UI.BankingPanel.BankingCtrl>();
        if (bankingCtrl != null)
        {
            var result = bankingCtrl.ExportToExcel("当前数据导出测试");
            
            if (result.Success)
            {
                Debug.Log($"[ExcelExportTester] 当前数据导出成功！");
                Debug.Log($"文件路径: {result.FilePath}");
            }
            else
            {
                Debug.LogError($"[ExcelExportTester] 当前数据导出失败: {result.Message}");
            }
        }
        else
        {
            Debug.LogError("[ExcelExportTester] 未找到BankingCtrl组件");
        }
    }
    
    /// <summary>
    /// 创建示例银行数据（按照您的示例）
    /// </summary>
    /// <returns>示例银行数据</returns>
    private BankingData CreateSampleBankingData()
    {
        var bankingData = new BankingData();
        
        // 设置基础参数
        bankingData.odds = 47f;
        bankingData.averageBetAmount = 206f;
        bankingData.maxLossLimit = 4000f;
        
        // 设置示例数据（按照您的示例）
        // 总数据：01,02,03 各100；05,06,08 各50
        // 自己吃码：01,02,03 各50；05,06,08 各25
        // 上报数据：01,02,03 各50；05,06,08 各25
        
        var sampleNumbers = new int[] { 1, 2, 3, 5, 6, 8 };
        var totalBets = new float[] { 100, 100, 100, 50, 50, 50 };
        var eatCodes = new float[] { 50, 50, 50, 25, 25, 25 };
        
        for (int i = 0; i < sampleNumbers.Length; i++)
        {
            var numberData = bankingData.GetNumberData(sampleNumbers[i]);
            if (numberData != null)
            {
                numberData.totalBetAmount = totalBets[i];
                numberData.selfBetAmount = eatCodes[i];
                numberData.UpdateReportAmount(); // 自动计算上报数量
                
                Debug.Log($"[ExcelExportTester] 设置号码{sampleNumbers[i]:D2}: 总押注={totalBets[i]}, 吃码={eatCodes[i]}, 上报={numberData.reportAmount}");
            }
        }
        
        // 重新计算所有风险值
        bankingData.RecalculateAllRiskValues();
        
        // 计算总体数据
        bankingData.CalculateTotalData();
        
        Debug.Log($"[ExcelExportTester] 示例数据创建完成");
        Debug.Log($"总押注: {bankingData.totalBetAmount}");
        Debug.Log($"总吃码: {bankingData.totalSelfBetAmount}");
        Debug.Log($"总上报: {bankingData.totalReportAmount}");
        
        return bankingData;
    }
    
    /// <summary>
    /// 打开导出目录（仅在编辑器中有效）
    /// </summary>
    [ContextMenu("打开导出目录")]
    public void OpenExportDirectory()
    {
        string exportDir = ExcelExporter.GetExportDirectory();
        
        #if UNITY_EDITOR
            if (System.IO.Directory.Exists(exportDir))
            {
                System.Diagnostics.Process.Start(exportDir);
                Debug.Log($"[ExcelExportTester] 已打开导出目录: {exportDir}");
            }
            else
            {
                Debug.LogWarning($"[ExcelExportTester] 导出目录不存在: {exportDir}");
            }
        #else
            Debug.Log($"[ExcelExportTester] 导出目录: {exportDir}");
        #endif
    }
    
    /// <summary>
    /// 清理导出目录中的测试文件
    /// </summary>
    [ContextMenu("清理测试文件")]
    public void CleanupTestFiles()
    {
        string exportDir = ExcelExporter.GetExportDirectory();
        
        if (System.IO.Directory.Exists(exportDir))
        {
            var files = System.IO.Directory.GetFiles(exportDir, "*.csv");
            int deletedCount = 0;
            
            foreach (var file in files)
            {
                try
                {
                    System.IO.File.Delete(file);
                    deletedCount++;
                    Debug.Log($"[ExcelExportTester] 已删除文件: {System.IO.Path.GetFileName(file)}");
                }
                catch (System.Exception ex)
                {
                    Debug.LogWarning($"[ExcelExportTester] 删除文件失败: {System.IO.Path.GetFileName(file)}, 错误: {ex.Message}");
                }
            }
            
            Debug.Log($"[ExcelExportTester] 清理完成，共删除 {deletedCount} 个文件");
        }
        else
        {
            Debug.LogWarning($"[ExcelExportTester] 导出目录不存在: {exportDir}");
        }
    }
} 